/*
    simplecookbook  -  simplecookbook.utils.PropriedadesJavaFiles.java
                             -------------------
    begin                : 08/10/2008
    copyright            : (C) 2008 by cristovao
    email                : cristovao.wollieson@gmail.com
 ***************************************************************************/

/*
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful, but   *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 *   General Public License for more details.                              *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,   *
 *   MA  02111-1307 USA                                                    *
 ***************************************************************************/

/**
 * Pacote responsavel pela captura de dados e reconhecimento
 * do sistema operacional em que esta operando
 *
 *
 * @author cristovao
 */
package org.ybacoby.simplecookbook.utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import org.ybacoby.simplecookbook.exception.SimpleCookBookException;



/**
 * @author cristovao
 * 
 *         Classe que se utiliza do sistema padrao de carga de propriedades de
 *         Java para a leitura no sistema
 */
public class PropriedadesJavaFiles implements ISistemaDefinicoes {

	/**
	 * para guardar os dados de definicoes para depois ser devolvido
	 */
	private Definicao definicao;

	/**
	 * Constructor
	 * 
	 */
	public PropriedadesJavaFiles() throws SimpleCookBookException {
		
		// Carregando a classe para atribuicao dos dados basicos
		this.definicao = new Definicao();
		
		// Capturando o nome do SO
		this.definicao.setSo(System.getProperty("os.name"));
		System.out.println("O sistema operacional: "+this.definicao.getSo());

		// Capturando o tipo de caminho do sistema
		this.definicao.setPath(getSoPath());
		
		// Lendo o arquivo de propriedades
		this.getDefinicao();
		
		// Corrigindo alguns dados de definicao
		this.setDefinicao();
	}

	/**
	 * @see org.ybacoby.simplecookbook.utils.ISistemaDefinicoes#carregarDefinicao()
	 */
	public Definicao carregarDefinicao() throws SimpleCookBookException {
		return this.definicao;
	}

	/**
	 * Descobre qual o sistema operacional em que esta rodando
	 * 
	 * @return Retorna como esta definido o caminho de pasta do sistema
	 * @throws SimpleCookBookException Caso nao descubra qual sistema esta sendo utilizado
	 */
	private char getSoPath() throws SimpleCookBookException {
		if (this.definicao.getSo().contains("Windows")) {
			System.out.println("Definido o caminho do SO: \\");
			return '\\';
		} else if (this.definicao.getSo().contains("Linux")) {
			System.out.println("Definido o caminho do SO: /");
			return '/';
		}
		throw new SimpleCookBookException();
	}
	
	/**
	 * Carregando todos os dados que estao no arquivo para o
	 * objeto Definicao
	 * 
	 * @throws SimpleCookBookException Caso nao consiga ler o arquivo
	 */
	private void getDefinicao() throws SimpleCookBookException {
		// Cria e le os valores padrao  
		Properties defaultProps = new Properties();  
		
		// Lendo o arquivo
		FileInputStream in;
		try {
			in = new FileInputStream("definicao.properties");
			defaultProps.load(in);  
			in.close(); 
		} catch (FileNotFoundException e) {
			throw new SimpleCookBookException();
		} catch (IOException e) {
			throw new SimpleCookBookException();
		}  
		
		// Carregandom o arquivo de definicoes
		this.definicao.setBancoDeDados(defaultProps.getProperty("banco.de.dados"));
		this.definicao.setEndSalvar(defaultProps.getProperty("end.salvar"));
		this.definicao.setLogoMarca(defaultProps.getProperty("logo.marca"));
	}
	
	private void setDefinicao() {
		this.definicao.setEndSalvar(this.definicao.getEndSalvar().replace(';', this.definicao.getPath()));
		this.definicao.setLogoMarca(this.definicao.getLogoMarca().replace(';', this.definicao.getPath()));
	}
}
